HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux ip-172-26-0-120 6.17.0-1009-aws #9~24.04.2-Ubuntu SMP Fri Mar 6 23:50:29 UTC 2026 x86_64
User: ubuntu (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/html/dashboard.orbiwheels.com/public/src/js/transporter/assign-modal.js
$(document).ready(function () {
    let selectedDriver = null;
    let selectedVehicle = null;
    let currentRequestId = null;
    let acceptFlow = false;
    let toBooking = false;
    let assignActionUrl = "";

    function fetchDrivers(query = '') {
        $.get(driverSearchUrl, { q: query }, function (data) {
            let html = '';
            data.forEach(driver => {
                html += `
                <div class="col-md-6 col-sm-6 profile_details pb-2">
                    <div class="well profile_view driver-card selectable shadow-sm"
                        data-id="${driver.id}">
                        <div class="col-sm-12">
                            <h4 class="brief"><i>${driver.name}</i></h4>
                            <div class="left col-md-7 col-sm-7">
                                <ul class="list-unstyled">
                                    <li><i class="fa fa-envelope"></i> Email: ${driver.email}</li>
                                    <li><i class="fa fa-phone"></i> Phone: ${driver.phone}</li>
                                    <li><i class="fa fa-user"></i> Age: ${driver.age ?? ''} years</li>
                                    <li><i class="fa fa-user"></i> Experience: ${driver.experience ?? ''}</li>
                                </ul>
                            </div>
                            <div class="right col-md-5 col-sm-5 text-center">
                                <img src="${driver.image ? '/storage/' + driver.image : '/images/user.png'}"
                                    class="img-circle img-fluid" alt="">
                            </div>
                        </div>
                        <div class="profile-bottom text-center">
                            <div class=" col-sm-6 emphasis">
                                
                            </div>

                        </div>
                    </div>
                </div>`;
            });
            $('#driverCards').html(html);
        });
    }

    function fetchVehicles(query = '') {
        $.get(vehicleSearchUrl, { q: query }, function (data) {
            let html = '';
            data.forEach(vehicle => {
                html += `
                <div class="col-md-6 col-sm-6 profile_details pb-2">
                    <div class="well profile_view vehicle-card selectable selectVhicle_card shadow-sm"
                        data-id="${vehicle.id}">
                        <div class="col-sm-12">
                            <h4 class="brief"><i>${vehicle.registration_number}</i></h4>
                            <div class="left col-md-7 col-sm-7">
                                <h2>${vehicle.make} ${vehicle.model}</h2>
                                <ul class="list-unstyled">
                                    <li><i class="fa fa-building"></i> GPS: ${vehicle.has_gps ? 'Enabled' : 'No'}</li>
                                    <li><i class="fa fa-phone"></i> Model: ${vehicle.year}</li>
                                </ul>
                            </div>
                            <div class="right col-md-5 col-sm-5 text-center">
                                <img src="${vehicle.vehicle_image ? '/storage/' + vehicle.vehicle_image : '/images/taxi-city.jpg'}"
                                    class="img-circle img-fluid" alt="">
                            </div>
                        </div>
                        <div class="profile-bottom text-center">
                            <div class=" col-sm-6 emphasis">
                                
                            </div>
                        </div>
                    </div>
                </div>`;
            });
            $('#vehicleCards').html(html);
        });
    }

    $('#driverSearch').on('keyup', function () {
        fetchDrivers($(this).val());
    });

    $('#vehicleSearch').on('keyup', function () {
        fetchVehicles($(this).val());
    });

    $(document).on('click', '.driver-card', function () {
        $('.driver-card').removeClass('active');
        $(this).addClass('active');
        selectedDriver = $(this).data('id');
    });

    $(document).on('click', '.vehicle-card', function () {
        $('.vehicle-card').removeClass('active');
        $(this).addClass('active');
        selectedVehicle = $(this).data('id');
    });

    $('#nextToVehicle').on('click', function () {
        if (!selectedDriver) {
            Swal.fire('Error', 'Please select a driver first!', 'error');
            return;
        }
        $('.step-driver').addClass('d-none');
        $('.step-vehicle').removeClass('d-none');
    });

    $('.backToDriver').on('click', function () {
        $('.step-vehicle').addClass('d-none');
        $('.step-driver').removeClass('d-none');
    });

    $('#saveAssignment').on('click', function () {
        if (!selectedVehicle) {
            Swal.fire('Error', 'Please select a vehicle!', 'error');
            return;
        }

        if (toBooking || acceptFlow === true) {
            assignRide(selectedDriver, selectedVehicle, "all");
        } else {
            assignRide(selectedDriver, selectedVehicle, "single");
        }

        Swal.fire({
            title: "Assign to all pending rides?",
            text: "Choose Yes to assign to all rides in this booking, or No to assign only this ride.",
            icon: "question",
            showCancelButton: true,
            confirmButtonText: "Yes, all rides",
            cancelButtonText: "No, only this ride"
        }).then((result) => {
            if (result.isConfirmed) {
                assignRide(selectedDriver, selectedVehicle, "all");
            } else if (result.dismiss === Swal.DismissReason.cancel) {
                assignRide(selectedDriver, selectedVehicle, "single");
            }
        });
    });

    function assignRide(driverId, vehicleId, type) {
        $.ajax({
            url: assignActionUrl, 
            method: "POST",
            data: {
                _token: csrfToken,
                driver_id: driverId,
                vehicle_id: vehicleId,
                assign_type: type,
                is_accept_flow: acceptFlow
            },
            success: function (response) {
                Swal.fire("Success", response.message, "success").then(() => {
                    location.reload();
                });
            },
            error: function (xhr) {
                let errorMessage = "Something went wrong!";
                if (xhr.responseJSON && xhr.responseJSON.message) {
                    errorMessage = xhr.responseJSON.message;
                }
                Swal.fire("Error", errorMessage, "error");
            }
        });
    }

    // Public function to open modal from anywhere
    window.openAssignModal = function (requestId = null, preselectedDriver = null, preselectedVehicle = null, accept_Flow = false, bookingId = null, fromBooking = false, to_booking = false) {
        currentRequestId = requestId;
        selectedDriver = preselectedDriver;
        selectedVehicle = preselectedVehicle;
        acceptFlow = accept_Flow;
        toBooking = to_booking;

        if (fromBooking && bookingId) {
            assignActionUrl  = `/booking/assign/${bookingId}`;
            currentRequestId = bookingId;
            console.log('Assign modal URL:', assignActionUrl, 'From Booking:', fromBooking, bookingId);
        } else if (requestId) {
            assignActionUrl  = assignUrl.replace(':id', requestId);
            console.log('Assign modal URL:', assignActionUrl, 'From trips:', requestId);
        }

        $('#assignModal').modal('show');
        $('.step-vehicle').addClass('d-none');
        $('.step-driver').removeClass('d-none');

        fetchDrivers();
        fetchVehicles();

        // Small delay to ensure DOM updates before selecting
        setTimeout(() => {
            if (preselectedDriver) {
                $(`#driverCards .driver-card[data-id="${preselectedDriver}"]`).addClass('active');
            }
            if (preselectedVehicle) {
                $(`#vehicleCards .vehicle-card[data-id="${preselectedVehicle}"]`).addClass('active');
            }
        }, 500);
    };
});